#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/timerfd.h>
#include <stdint.h>
#include <inttypes.h>  // 用于正确打印 uint64_t 类型

int main()
{
    // 创建 timerfd
    int timefd = timerfd_create(CLOCK_MONOTONIC, 0);
    if (timefd < 0) {
        perror("timerfd_create error");
        return -1;
    }

    // 设置定时器触发时间
    struct itimerspec itime;
    itime.it_value.tv_sec = 1;       // 第一次1秒后触发
    itime.it_value.tv_nsec = 0;
    itime.it_interval.tv_sec = 3;    // 之后每3秒触发一次
    itime.it_interval.tv_nsec = 0;

    // 检查 timerfd_settime 的返回值
    if (timerfd_settime(timefd, 0, &itime, NULL) < 0) {
        perror("timerfd_settime error");
        close(timefd);
        return -1;
    }

    // 进入读取定时器触发次数的循环
    while (1) {
        uint64_t times;
        // 使用 sizeof(times) 来保证读取正确大小的数据
        int ret = read(timefd, &times, sizeof(times));
        if (ret < 0) {
            perror("read error");
            close(timefd);
            return -1;
        }

        // 使用正确的格式化符输出 uint64_t 类型的 times
        printf("超时了，距离上一次超时 %" PRIu64 " 次\n", times);
    }

    close(timefd);
    return 0;
}
